// 二次封装axios
import axios from 'axios'
import Nprogress from 'nprogress'
import 'nprogress/nprogress.css'
import { getUserTempId } from '@/utils/userAbout'
import store from '@/store'
// 想要二次封装axios增加的功能
// 配置基础路径和超时限制
// 添加进度条信息  nprogress
// 返回的响应不再需要从data属性当中拿数据，而是响应就是我们要的数据
// 统一处理请求错误

// 创建一个axios实例
const ajax = axios.create({
  baseURL: '/api', //基础路径
  timeout: 10000, //超时时间
})

// 添加请求拦截器
ajax.interceptors.request.use(function (config) {
  // 发送请求成功执行的回调函数
  // config是请求所有的信息组成的对象（请求报文）

  config.headers.userTempId = getUserTempId()
  // console.log(config)
  let token = store.state.user.token
  if (token) {
    config.headers.token = token
  }
  Nprogress.start()
  return config
})

// 添加响应拦截器
ajax.interceptors.response.use(
  function (response) {
    // 响应请求成功执行的回调函数
    // response是响应所有的信息组成的对象（响应报文）
    Nprogress.done()
    return response.data
  },
  function (error) {
    // 请求失败执行的回调函数
    // return Promise.reject(error)
    if (error.response.status == 401) {
      alert('未授权')
    } else if (error.response.status == 403) {
      alert('禁止访问')
    } else if (error.response.status == 404) {
      alert('错误访问')
    } else if (error.response.status == 500) {
      alert('服务器出错了')
    }
    Nprogress.done()
    return new Promise(() => {}) //返回一个padding状态的promise 中断promise链
  }
)

export default ajax
